home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / assembler / progasm1.lha / SORGENTI / LEZIONE1a.S next >
Text File  |  1994-10-30  |  6KB  |  97 lines

  1.  
  2. ; by Fabio Ciucci - Assemblare con "A", eseguire con "J"
  3.  
  4. Waitmouse:            ; questa LABEL serve di riferimento per il bne.
  5.     move.w    $dff006,$dff180    ; metti il valore di $dff006 nel $dff180
  6.                 ; cioe' di VHPOSR in COLOR00
  7.     btst    #6,$bfe001    ; tasto sinistro del mouse premuto?
  8.     bne.s    Waitmouse    ; se no ritorna a waitmouse e ripeti
  9.     rts            ; esci
  10.  
  11.     END
  12.  
  13. ; NOTA: il comando MOVE significa MUOVI, o meglio COPIA il numero contenuto
  14. ; nel primo operando nel secondo, in questo caso "LEGGI CHE NUMERO C'E' IN
  15. ; $DFF006, E METTILO IN $DFF180". Il .w significa che muove una word, cioe'
  16. ; 2 bytes, cioe' 16 bit (1 byte=8 bit, 1 word=16 bit, 1 longword=32 bit)
  17. ; NOTA2: il BTST seguito dal BNE serve per fare un salto nel programma nel
  18. ; caso che si sia verificata una condizione: si puo' tradurre cosi':
  19. ; BTST = CONTROLLA SE PIERO HA MANGIATO LA MELA,E SCRIVILO SU UN PEZZO DI CARTA
  20. ; BNE = IL BNE VA A LEGGERE NEL PEZZO DI CARTA SE PIERO HA MANGIATO LA MELA,
  21. ; COSA CHE NON PUO' VERIFICARE LUI, MA CHE GLI HA VERIFICATO L'AMICO BTST...
  22. ; NEL CASO CHE NEL FOGLIETTO CI SIA SCRITTO CHE NON LA HA MANGIATA, ALLORA
  23. ; SALTA ALLA LABEL INDICATA (IN QUESTO CASO BNE.S Waitmouse, quindi se piero
  24. ; non ha mangiato la mela il processore saltera' a Waitmouse e ripetera' il
  25. ; tutto; se invece la ha mangiata, allora non salta a Waitmouse, ma continua
  26. ; eseguendo l'instruzione sotto il BNE... in queso caso ci trova un RTS e
  27. ; di conseguenza il programma finisce. Il foglio in cui BTST scrive la sentenza
  28. ; per il BNE e' lo STATUS REGISTER, o SR. Se ad esempio al posto del BNE
  29. ; ci fosse stato un BEQ, allora il loop avverrebbe solo quando il mouse
  30. ; e' premuto, e finirebbe al suo rilascio (IL CONTRARIO: INFATTI BNE significa:
  31. ; BRANCH IF NOT EQUAL, ossia SALTA SE NON e' UGUALE (falso), mentre BEQ:
  32. ; BRANCH IF EQUAL, ossia salta se e' UGUALE (vero).
  33. ; Nella prima linea si legge il valore presente nel $dff006, ossia la linea
  34. ; raggiunta dal pennello elettronico che riscrive continuamente lo schermo,
  35. ; quindi un numero sempre diverso, e si mette nel $dff180, che e' il
  36. ; registro che controlla il colore 0, di conseguenza si ottiene lo schermo
  37. ; lampeggiante o striato, in cui cioe' viene cambiato il colore continuamente.
  38. ; verificate che $dff006 e' VHPOSR facendo "=c 006", e che $dff180 e' il
  39. ; COLOR 0, facendo "=C 180". questo aiuto lo potete chiedere all'ASMONE per
  40. ; ogni registro $dffxxx.
  41. ; il formato dei colori e' il seguente: $0RGB, cioe' la word del registro
  42. ; e' divisa in RED, GREEN e BLU, in 16 toni per colore; mischiandoli come
  43. ; dalla PALETTE o TAVOLOZZA del deluxe paint si puo' selezionare uno dei
  44. ; 4096 colori possibili (16*16*16=4096), ogni valore di RED, GREEN e BLU,
  45. ; ossia ROSSO, VERDE e BLU, va da 0 a F (numero esadecimale, ossia puo'
  46. ; essere 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f), per esempio provate a cambiare la
  47. ; prima linea con MOVE.W #$000,$dff180: si otterra' colore nero
  48. ; cambiandola con MOVE.W #$00e,$dff180 si otterra' il BLU, 
  49. ; con un MOVE.W #$cd0,$dff180 si otterra' il GIALLO, ossia rosso+verde...
  50. ; provate a cambiare il colore per verificare se avete capito
  51. ; #$444 = grigio, #$900 = rosso scuro, #$e00 = rosso acceso, #$0a0 = verde....
  52. ; se infine cambiate il $dff180 con $dff182 lampeggeranno le scritte anziche'
  53. ; lo sfondo, cioe' quello colororato col colore 1. Se mettete entrambe le
  54. ; istruzioni una dopo l'altra lampeggeranno sia lo sfondo che le scritte.
  55. ; Il comando BTST controlla se un BIT in un dato indirizzo e'=0...
  56. ; ricordati che il numero dei bit va letto da destra verso sinistra e
  57. ; partendo da 0, ad esempio in un byte tipo %01000000 , il bit ad 1 e' il 6:
  58. ; 76543210          5432109876543210
  59. ; 01000000    una word:  0001000000000000 <= qua e' a 1 il bit 12!!!
  60. ;
  61. ; P.S:    Il primo bit viene detto bit 0 e non bit 1, quindi non bisogna mai
  62. ;    confondersi per questa cosa, cioe' che, per esempio, il settimo bit
  63. ;    venga chiamato bit 6. Per non sbagliarvi mettete sempre la numerazione
  64. ;    ; 5432109876543210 sopra il numero in binario.
  65. ;
  66. ; il bit 6 di $bfe001 infatti e' il bottone sinistro del mouse.
  67. ; Il nome del registro $bfe001 e' CIAAPRA, ma nessuno se lo ricorda.
  68. ; il bottone destro invece e' il bit 2 di $dff016. prova a sostituire la
  69. ; linea BTST #6,$bfe001 con BTST #2,$dff016, e servira' il bottone destro
  70. ; per uscire dal ciclo. Fate tutte le variazioni suggerite per verificare!
  71. ; NOTA: se volete salvare il programma in modo che sia seguibile dal CLI
  72. ; basta fare "WO" dopo aver assemblato con A (e prima di fare il J!),
  73. ; e vi apparira' la finestrella per decidere dove salvarlo
  74. ; (Mi raccomando! salvatelo su un altro dischetto! Tenete il disco del
  75. ; corso protetto da scrittura e guai se ci scrivete sopra!!!).
  76. ; Se volete invece salvare il listato, usate il comando "W". ( su un altro
  77. ; disco!!!).
  78.  
  79. ; PSPS: Avrete notato il BNE.S, che a un suffisso che non e' ne' .B, ne' .W
  80. ;    ne' .L!!!! Ebbene nelle istruzioni come BNE, BEQ, BSR si possono dare
  81. ;    solo due dimensioni: .B e .W, che pero' non influenzano il risultato,
  82. ;    infatti un bne.w fara' la stessa cosa di un bne.b. In queste istruzioni
  83. ;    e' permesso di chiamare il .B come .S, che sta per SHORT (corto), e
  84. ;    si puo' usare solo se la label a cui si riferisce non e' troppo
  85. ;    "lontana", altrimenti l'ASMONE durante l'assemblaggio la cambiera' nel
  86. ;    listato automaticamente in .W. Dato che il .S (che ripeto sta per .B)
  87. ;    puo' essere usato solo con tali istruzioni, credo sia meglio usarlo,
  88. ;    ora che lo sapete non dovrebbe creare problemi.
  89. ;    PSPSPS: Se mettete come grandezza un .L, (BNE.L) l'ASMONE non da errore
  90. ;    e assembla come .W, altri assemblatori danno errore. Se dimenticate
  91. ;    di mettere il suffisso (BNE Inizio), l'ASMONE assemblera' sempre come
  92. ;    BNE.W, lo stesso vale per le altre istruzioni! scrivere MOVE $10,$20,
  93. ;    non da errore perche' viene assemblato come MOVE.W $10,$20, MA NON E'
  94. ;    DETTO CHE TUTTI GLI ASSEMBLATORI SI COMPORTINO COSI', DUNQUE METTETE
  95. ;    SEMPRE IL SUFFISSO, che e' anche esteticamente piu' bello.
  96.  
  97.